// var i;
// var c = cc._decorator;
// var s = c.ccclass;
// var l = (c.property, c.inspector);
// var u = (function (e) {
//     function t() {
//         var t = (null !== e && e.apply(this, arguments)) || this;
//         t.cantClick = !0;
//         return t;
//     }
//     __extends(t, e);
//     t.prototype.onLoad = function () {
//         this.AddEvent();
//     };
//     t.prototype.AddEvent = function () {
//         this.node.on(cc.Node.EventType.TOUCH_START, this.onChildTouchStart, this);
//         this.node.on(cc.Node.EventType.TOUCH_MOVE, this.onChildTouchMove, this);
//         this.node.on(cc.Node.EventType.TOUCH_END, this.onChildTouchUp, this);
//         this.node.on(cc.Node.EventType.TOUCH_CANCEL, this.onChildTouchUp, this);
//     };
//     t.prototype.StartSet = function (e, t, o) {
//         this.touchStart = e;
//         this.touchMove = t;
//         this.touchUp = o;
//     };
//     t.prototype.onChildTouchStart = function (e) {
//         if (this.cantClick && this.touchStart) {
//             this.touchStart(e);
//         }
//     };
//     t.prototype.onChildTouchMove = function (e) {
//         if (this.cantClick && this.touchMove) {
//             this.touchMove(e);
//         }
//     };
//     t.prototype.onChildTouchUp = function (e) {
//         if (this.cantClick && this.touchUp) {
//             this.touchUp(e);
//         }
//     };
//     t.prototype.offEvent = function () {
//         this.node.targetOff(this);
//     };
//     t.prototype.SetDelayCantClick = function (e) {
//         var t = this;
//         this.cantClick = !1;
//         this.scheduleOnce(function () {
//             t.cantClick = !0;
//         }, e);
//     };
//     t.prototype.SetCantClick = function (e) {
//         this.cantClick = e;
//         this.offEvent();
//         if (e) {
//             this.AddEvent();
//         }
//     };
//     return __decorate([s], t);
// })(cc.Component);
// exports.default = u;

// const { ccclass, property, inspector } = cc._decorator;

// /**
//  * 建议类名：TouchEventHandler
//  * 该类用于处理节点的触摸事件，并提供启用/禁用触摸事件的功能。
//  */
// @ccclass
// class Logic_ChildMoveEvent extends cc.Component {
//     /** 是否可以点击 */
//     private cantClick: boolean = true;

//     /** 触摸开始回调 */
//     private touchStart: (event: cc.Event.EventTouch) => void = null;

//     /** 触摸移动回调 */
//     private touchMove: (event: cc.Event.EventTouch) => void = null;

//     /** 触摸结束回调 */
//     private touchUp: (event: cc.Event.EventTouch) => void = null;

//     /**
//      * 当组件加载时调用，添加触摸事件监听
//      * 建议方法名：onComponentLoad
//      */
//     onLoad(): void {
//         this.addEventListeners();
//     }

//     /**
//      * 添加触摸事件监听
//      * 建议方法名：addEventListeners
//      */
//     private addEventListeners(): void {
//         this.node.on(cc.Node.EventType.TOUCH_START, this.onChildTouchStart, this);
//         this.node.on(cc.Node.EventType.TOUCH_MOVE, this.onChildTouchMove, this);
//         this.node.on(cc.Node.EventType.TOUCH_END, this.onChildTouchUp, this);
//         this.node.on(cc.Node.EventType.TOUCH_CANCEL, this.onChildTouchUp, this);
//     }

//     /**
//      * 设置触摸事件的回调函数
//      * @param touchStart 触摸开始回调
//      * @param touchMove 触摸移动回调
//      * @param touchUp 触摸结束回调
//      * 建议方法名：setTouchCallbacks
//      */
//     StartSet(touchStart: (event: cc.Event.EventTouch) => void, touchMove: (event: cc.Event.EventTouch) => void, touchUp: (event: cc.Event.EventTouch) => void): void {
//         this.touchStart = touchStart;
//         this.touchMove = touchMove;
//         this.touchUp = touchUp;
//     }

//     /**
//      * 触摸开始事件处理
//      * @param event 触摸事件
//      * 建议方法名：handleTouchStart
//      */
//     private onChildTouchStart(event: cc.Event.EventTouch): void {
//         if (this.cantClick && this.touchStart) {
//             this.touchStart(event);
//         }
//     }

//     /**
//      * 触摸移动事件处理
//      * @param event 触摸事件
//      * 建议方法名：handleTouchMove
//      */
//     private onChildTouchMove(event: cc.Event.EventTouch): void {
//         if (this.cantClick && this.touchMove) {
//             this.touchMove(event);
//         }
//     }

//     /**
//      * 触摸结束事件处理
//      * @param event 触摸事件
//      * 建议方法名：handleTouchEnd
//      */
//     private onChildTouchUp(event: cc.Event.EventTouch): void {
//         if (this.cantClick && this.touchUp) {
//             this.touchUp(event);
//         }
//     }

//     /**
//      * 移除所有触摸事件监听
//      * 建议方法名：removeEventListeners
//      */
//     private offEvent(): void {
//         this.node.targetOff(this);
//     }

//     /**
//      * 设置延迟后禁用点击
//      * @param delay 延迟时间（秒）
//      * 建议方法名：setDelayedCantClick
//      */
//     SetDelayCantClick(delay: number): void {
//         this.cantClick = false;
//         this.scheduleOnce(() => {
//             this.cantClick = true;
//         }, delay);
//     }

//     /**
//      * 设置是否可以点击
//      * @param canClick 是否可以点击
//      * 建议方法名：setCantClick
//      */
//     SetCantClick(canClick: boolean): void {
//         this.cantClick = canClick;
//         this.offEvent();
//         if (canClick) {
//             this.addEventListeners();
//         }
//     }
// }

// export default Logic_ChildMoveEvent;

const { ccclass, property, inspector } = cc._decorator;

/**
 * 建议类名：TouchEventHandler
 * 该类用于处理节点的触摸事件，并提供启用/禁用触摸事件的功能。
 */
@ccclass
class LogicChildMoveEvent extends cc.Component {
    /** 是否可以点击 */
    private canClick: boolean = true;

    /** 触摸开始回调 */
    private onTouchStart: (event: cc.Event.EventTouch) => void = null;

    /** 触摸移动回调 */
    private onTouchMove: (event: cc.Event.EventTouch) => void = null;

    /** 触摸结束回调 */
    private onTouchEnd: (event: cc.Event.EventTouch) => void = null;

    /**
     * 当组件加载时调用，添加触摸事件监听
     * 建议方法名：onComponentLoad
     */
    onLoad(): void {
        this.registerEventListeners();
    }

    /**
     * 添加触摸事件监听
     * 建议方法名：addEventListeners
     */
    private registerEventListeners(): void {
        this.node.on(cc.Node.EventType.TOUCH_START, this.handleTouchStart, this);
        this.node.on(cc.Node.EventType.TOUCH_MOVE, this.handleTouchMove, this);
        this.node.on(cc.Node.EventType.TOUCH_END, this.handleTouchEnd, this);
        this.node.on(cc.Node.EventType.TOUCH_CANCEL, this.handleTouchEnd, this);
    }

    /**
     * 设置触摸事件的回调函数
     * @param touchStart 触摸开始回调
     * @param touchMove 触摸移动回调
     * @param touchEnd 触摸结束回调
     * 建议方法名：setTouchCallbacks
     */
    startSet(touchStart: (event: cc.Event.EventTouch) => void, touchMove: (event: cc.Event.EventTouch) => void, touchEnd: (event: cc.Event.EventTouch) => void): void {
        this.onTouchStart = touchStart;
        this.onTouchMove = touchMove;
        this.onTouchEnd = touchEnd;
    }

    /**
     * 触摸开始事件处理
     * @param event 触摸事件
     * 建议方法名：handleTouchStart
     */
    private handleTouchStart(event: cc.Event.EventTouch): void {
        if (this.canClick && this.onTouchStart) {
            this.onTouchStart(event);
        }
    }

    /**
     * 触摸移动事件处理
     * @param event 触摸事件
     * 建议方法名：handleTouchMove
     */
    private handleTouchMove(event: cc.Event.EventTouch): void {
        if (this.canClick && this.onTouchMove) {
            this.onTouchMove(event);
        }
    }

    /**
     * 触摸结束事件处理
     * @param event 触摸事件
     * 建议方法名：handleTouchEnd
     */
    private handleTouchEnd(event: cc.Event.EventTouch): void {
        if (this.canClick && this.onTouchEnd) {
            this.onTouchEnd(event);
        }
    }

    /**
     * 移除所有触摸事件监听
     * 建议方法名：removeEventListeners
     */
    private removeEventListeners(): void {
        this.node.targetOff(this);
    }

    /**
     * 设置延迟后禁用点击
     * @param delay 延迟时间（秒）
     * 建议方法名：setDelayedCantClick
     */
    setDelayCantClick(delay: number): void {
        this.canClick = false;
        this.scheduleOnce(() => {
            this.canClick = true;
        }, delay);
    }

    /**
     * 设置是否可以点击
     * @param canClick 是否可以点击
     * 建议方法名：setCantClick
     */
    setCantClick(canClick: boolean): void {
        this.canClick = canClick;
        this.removeEventListeners();
        if (canClick) {
            this.registerEventListeners();
        }
    }
}

export default LogicChildMoveEvent;